<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>promise的含义</title>
</head>
<body>
  <p>
    promise是异步编程的一种解决方案，比传统的解决方案(回调函数和事件) 更合理和强大。它由社区最早提出和实现
    es6将其写进了语言标准。统一了用法，原生提供promise对象。
  </p>
  <hr>
  <p>
    所谓promise，简单来说就是一个容器。里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果
    <br>
    从语法上来说，promise是一个对象，从它可以获取异步操作的消息，Promise提供统一API，各种异步操作都可以用同样的方法进行处理
  </p>
  <hr>
  <p>promise对象有以下俩个特点</p>
  <p>1. 对象的状态不受外界影响。</p><br>
  <p>promise对象代表一个异步操作，有三种状态：pendding(进行中)，fufilled(已成功)，和rejected(已失败)</p><br>
  <p>只有异步操作的结果，可以决定当前是哪一种状态，任何其他操作都无法改变这个状态，这也是Promise这个名字的由来，
    它的英语意思就是“承诺”，表示其他手段无法改变
  </p><br>
  <p>2. 一旦状态改变，就不会再变。任何时候都可以得到这个结果。<br>
  promise对象的状态改变只有俩种可能：pendding => fufilled 和 pendding => rejected <br>
只要这俩种情况发生，状态就凝固了，不会再变了，会一直保持这个结果，这时就称为resloved(已定型)</p><br>
<p>如果改变已经发生了，你再对promise对象添加回调函数，也会立即得到这个结果，这与事件(Event)完全不同，事件
  的特点是，如果你错过了它，再去监听，是得不到结果的。
  注意： 为了行文方便，本章后的resolved统一只指fufilled状态，不包含rejected状态。
</p>
<hr>
<h1>Promise也有一些缺点</h1>
<p>首先，无法取消Promise，一旦新建它就会立即执行，无法中途取消<br>
  其次，如果不设置回调函数，Promise内部抛出的错误，不会反应到外部。<br>
  第三，当处于pending状态时，无法得知目前进展到哪一个阶段（刚刚开始还是即将完成）。</p>
  <h2>注意：如果某些事件不断地反复发生，一般来说，使用 Stream 模式是比部署Promise更好的选择。</h2>
</body>
</html>